#pragma once
// 业务进程的事件循环（采用双缓冲队列实现）
#include <queue>
#include <mutex>
#include <condition_variable>

#include "work/luaManager.h"

typedef void (*workFunc)(WorkMsg&& msg);// 用于向双缓冲队列中绑定处理函数


class DBufQueue
{
public:
    DBufQueue();// 注册处理函数
    ~DBufQueue();
    bool InitDbufQueue(workFunc workFunc);
    void Push(WorkMsg& item);// 往队列中存入函数(被多线程调用)
    void DealReadQueueMsg();// 主线程处理一次缓冲区所有数据的函数
    bool BeginWorkCycle();// 开启主线程的工作循环
    void DealAllMsg();// 系统终止前处理所有的残留消息
    
private:
    std::queue<WorkMsg> m_readQueue;
    std::queue<WorkMsg> m_writeQueue;
    std::mutex m_swapMutex;
    std::condition_variable m_cond;
    workFunc m_func;// 保存处理函数
};


